package com.decent.manager.system.controller;

import com.decent.common.bo.MessageBean;
import com.decent.common.enums.ErrorCodeEnum;
import com.decent.manager.system.dto.SystemGoodsDTO;
import com.decent.manager.system.service.SystemGoodsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 系统商品管理接口
 * @author: decent Gjh
 * @date: 2022/10/25/18:33
 * @description:
 */
@RequestMapping("goods")
@RestController
@Slf4j
@CrossOrigin
public class SystemGoodsController {
    private final SystemGoodsService goodsService;

    public SystemGoodsController(SystemGoodsService goodsService) {
        this.goodsService = goodsService;
    }

    /**
     * 增加商品
     * args：
     *   brandId int    品牌id
     *   name   string  商品名
     *   code   string  商品编码
     *   introduce string描述
     *   presentPrice decimal 商品现在价格
     *   originalPrice decimal 商品原价
     *   stock  int     库存
     * @param goodsDTO 商品信息
     * @param result result
     * @return 返回是否成功
     */
    @PostMapping()
    public MessageBean addGoods(@Validated(Insert.class) SystemGoodsDTO goodsDTO , BindingResult result) {
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return goodsService.insertGoods(goodsDTO);
    }

    /**
     * 删除商品
     * args：
     *   id int 商品id
     * @param goodsDTO 商品信息
     * @param result    result
     * @return 是否成功
     */
    @DeleteMapping
    public MessageBean deleteGoods(@Validated(Delete.class) SystemGoodsDTO goodsDTO, BindingResult result) {
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return goodsService.deleteGoods(goodsDTO);
    }

    /**
     * 更新商品
     * args：
     *   id int 商品id
     *   name string 商品名
     *   sort int 顺序
     *   classifyId 所属分类的id
     * @param goodsDTO 商品信息
     * @param result result
     * @return 是否成功
     */
    @PutMapping
    public MessageBean updateGoods(@Validated(Update.class) SystemGoodsDTO goodsDTO, BindingResult result){
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return goodsService.updateGoods(goodsDTO);
    }

    /**
     * 获取商品
     * @param goodsDTO 商品信息
     * @param result result
     * @return 商品列表
     */
    @GetMapping
    public MessageBean selectGoods( @Validated(Select.class) SystemGoodsDTO goodsDTO, BindingResult result){
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return goodsService.selectGoods(goodsDTO);
    }
}
